/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package bean;

import datos.Usuario;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import negocio.GestorLogueoLocal;
import negocio.GestorUsuarioLocal;
import skin.SkinBean;

/**
 *
 * @author Ing. Monica Merlo, Ing. Agustin  Fernandez
 */
public class LogueoBean {

    @EJB(beanName = "GestorLogueoBean")
    private GestorLogueoLocal gestorLogueoBean;
    @EJB(beanName = "GestorUsuarioBean")
    private GestorUsuarioLocal gestorUsuarioBean;
    private boolean permisoVerObra = false;
    private boolean permisoModObra = false;
    private boolean permisoVerCertificado = false;
    private boolean permisoModCertificado = false;
    private boolean permisoVerFotos = false;
    private boolean permisoModFotos = false;
    private boolean permisoVerProgramaciones = false;
    private boolean permisoModProgramaciones = false;
    private boolean permisoSeguimientoProgramaciones = false;
    private boolean permisoVerPago = false;
    private boolean permisoModPago = false;
    private boolean permisoVerEmpresa = false;
    private boolean permisoModEmpresa = false;
    private boolean permisoVerContrato = false;
    private boolean permisoModContrato = false;
    private boolean permisoAdministracion = false;
    private boolean permisoEliminarObra = false;
    private String usuario;
    private String clave;
    private String nombre;
    private String apellido;
    private boolean autenticado = false;
    private boolean autorizado = false;

    /** Creates a new instance of LogueoBean */
    public LogueoBean() {
    }

    /**
     * @return the permisoVerProgramaciones
     */
    public boolean isPermisoVerProgramaciones() {
        return permisoVerProgramaciones;
    }

    /**
     * @param permisoVerProgramaciones the permisoVerProgramaciones to set
     */
    public void setPermisoVerProgramaciones(boolean permisoVerProgramaciones) {
        this.permisoVerProgramaciones = permisoVerProgramaciones;
    }

    /**
     * @return the permisoModProgramaciones
     */
    public boolean isPermisoModProgramaciones() {
        return permisoModProgramaciones;
    }

    /**
     * @param permisoModProgramaciones the permisoModProgramaciones to set
     */
    public void setPermisoModProgramaciones(boolean permisoModProgramaciones) {
        this.permisoModProgramaciones = permisoModProgramaciones;
    }

    /**
     * @return the permisoVerEmpresa
     */
    public boolean isPermisoVerEmpresa() {
        return permisoVerEmpresa;
    }

    /**
     * @param permisoVerEmpresa the permisoVerEmpresa to set
     */
    public void setPermisoVerEmpresa(boolean permisoVerEmpresa) {
        this.permisoVerEmpresa = permisoVerEmpresa;
    }

    /**
     * @return the permisoVerContrato
     */
    public boolean isPermisoVerContrato() {
        return permisoVerContrato;
    }

    /**
     * @param permisoVerContrato the permisoVerContrato to set
     */
    public void setPermisoVerContrato(boolean permisoVerContrato) {
        this.permisoVerContrato = permisoVerContrato;
    }

    /**
     * @return the permisoModFotos
     */
    public boolean isPermisoModFotos() {
        return permisoModFotos;
    }

    /**
     * @param permisoModFotos the permisoModFotos to set
     */
    public void setPermisoModFotos(boolean permisoModFotos) {
        this.permisoModFotos = permisoModFotos;
    }

    /**
     * @return the autorizado
     */
    public boolean isAutorizado() {
        return autorizado;
    }

    /**
     * @param autorizado the autorizado to set
     */
    public void setAutorizado(boolean autorizado) {
        this.autorizado = autorizado;
    }

    /**
     * @return the permisoSeguimientoProgramaciones
     */
    public boolean isPermisoSeguimientoProgramaciones() {
        return permisoSeguimientoProgramaciones;
    }

    /**
     * @param permisoSeguimientoProgramaciones the permisoSeguimientoProgramaciones to set
     */
    public void setPermisoSeguimientoProgramaciones(boolean permisoSeguimientoProgramaciones) {
        this.permisoSeguimientoProgramaciones = permisoSeguimientoProgramaciones;
    }

    /**
     * @return the permisoEliminarObra
     */
    public boolean isPermisoEliminarObra() {
        return permisoEliminarObra;
    }

    /**
     * @param permisoEliminarObra the permisoEliminarObra to set
     */
    public void setPermisoEliminarObra(boolean permisoEliminarObra) {
        this.permisoEliminarObra = permisoEliminarObra;
    }

    public enum Permisos {

        VEROBRA, MODOBRA, VERCERTIFICADO, MODCERTIFICADO,
        MODPAGO, VERPAGO, MODEMPRESA, MODCONTRATO, ADMINISTRACION,
        VERFOTOS, MODFOTOS, VERPROGRAMACION, MODPROGRAMACION, VEREMPRESA,
        VERCONTRATO, SEGUIMIENTOPROGRAMACION, ELIMINAROBRA;
    }

    public String validarUsuario() {
        Usuario usu = this.gestorLogueoBean.validarUsuario(usuario, clave);
        
        if (usu != null) {
            this.autenticado = true;
            this.nombre = usu.getNombre().toUpperCase();
            this.apellido = usu.getApellido().toUpperCase();
            this.usuario = usu.getUsuario();
            this.clave = usu.getPassword();
            for (datos.Permiso p : usu.getPermisoCollection()) {
                switch (Permisos.valueOf(p.getNombre())) {
                    case VEROBRA:
                        this.permisoVerObra = true;
                        break;
                    case MODOBRA:
                        this.permisoModObra = true;
                        break;
                    case VERCERTIFICADO:
                        this.permisoVerCertificado = true;
                        break;
                    case MODCERTIFICADO:
                        this.permisoModCertificado = true;
                        break;
                    case MODPAGO:
                        this.permisoModPago = true;
                        break;
                    case VERPAGO:
                        this.permisoVerPago = true;
                        break;
                    case MODEMPRESA:
                        this.permisoModEmpresa = true;
                        break;
                    case MODCONTRATO:
                        this.permisoModContrato = true;
                        break;
                    case ADMINISTRACION:
                        this.permisoAdministracion = true;
                        break;
                    case MODFOTOS:
                        this.permisoModFotos = true;
                        break;
                    case VERFOTOS:
                        this.permisoVerFotos = true;
                        break;
                    case VERPROGRAMACION:
                        this.permisoVerProgramaciones = true;
                        break;
                    case MODPROGRAMACION:
                        this.permisoModProgramaciones = true;
                        break;
                    case VEREMPRESA:
                        this.permisoVerEmpresa = true;
                        break;
                    case VERCONTRATO:
                        this.permisoVerContrato = true;
                        break;
                    case SEGUIMIENTOPROGRAMACION:
                        this.permisoSeguimientoProgramaciones=true;
                        break;
                    case ELIMINAROBRA:
                        this.permisoEliminarObra = true;
                        break;
                }
            }
            FacesContext context = FacesContext.getCurrentInstance();
            SkinBean skinBean = (SkinBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "SkinBean");
            String skinSel = gestorUsuarioBean.skinSeleccionado(this.usuario);
            skinBean.setSkin(skinSel);
            return "obraPublica";
        } else {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Usuario o Password incorrectos", ""));
            return null;
        }
    }

    public String cerrarSesion() {
        this.permisoVerObra = false;
        this.permisoModObra = false;
        this.permisoVerCertificado = false;
        this.permisoVerFotos = false;
        this.permisoModFotos = false;
        this.permisoVerProgramaciones = false;
        this.permisoVerEmpresa = false;
        this.permisoVerContrato = false;
        this.permisoModCertificado = false;
        this.permisoModPago = false;
        this.permisoVerPago = false;
        this.permisoModEmpresa = false;
        this.permisoModContrato = false;
        this.permisoModProgramaciones = false;
        this.permisoAdministracion = false;
        this.permisoSeguimientoProgramaciones=false;
        this.permisoEliminarObra = false;
        this.autenticado = false;
        this.nombre = "";
        this.apellido = "";
        this.usuario = "";
        this.clave = "";
        FacesContext context = FacesContext.getCurrentInstance();
        SkinBean skinBean = (SkinBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "SkinBean");
        skinBean.setSkin("classic");
        return "logueo";
    }

   public String onload(){
        if(this.autenticado == false)return "logueo";
        return null;
   }


    /**
     * @return the permisoVerObra
     */
    public boolean isPermisoVerObra() {
        return permisoVerObra;
    }

    /**
     * @param permisoVerObra the permisoVerObra to set
     */
    public void setPermisoVerObra(boolean permisoVerObra) {
        this.permisoVerObra = permisoVerObra;
    }

    public boolean isPermisoVerFotos() {
        return permisoVerFotos;
    }

    public void setPermisoVerFotos(boolean permisoVerFotos) {
        this.permisoVerFotos = permisoVerFotos;
    }

    /**
     * @return the permisoModObra
     */
    public boolean isPermisoModObra() {
        return permisoModObra;
    }

    /**
     * @param permisoModObra the permisoModObra to set
     */
    public void setPermisoModObra(boolean permisoModObra) {
        this.permisoModObra = permisoModObra;
    }

    /**
     * @return the permisoVerCertificado
     */
    public boolean isPermisoVerCertificado() {
        return permisoVerCertificado;
    }

    /**
     * @param permisoVerCertificado the permisoVerCertificado to set
     */
    public void setPermisoVerCertificado(boolean permisoVerCertificado) {
        this.permisoVerCertificado = permisoVerCertificado;
    }

    /**
     * @return the permisoModCertificado
     */
    public boolean isPermisoModCertificado() {
        return permisoModCertificado;
    }

    /**
     * @param permisoModCertificado the permisoModCertificado to set
     */
    public void setPermisoModCertificado(boolean permisoModCertificado) {
        this.permisoModCertificado = permisoModCertificado;
    }

    /**
     * @return the permisoVerPago
     */
    public boolean isPermisoVerPago() {
        return permisoVerPago;
    }

    /**
     * @param permisoVerPago the permisoVerPago to set
     */
    public void setPermisoVerPago(boolean permisoVerPago) {
        this.permisoVerPago = permisoVerPago;
    }

    /**
     * @return the permisoModPago
     */
    public boolean isPermisoModPago() {
        return permisoModPago;
    }

    /**
     * @param permisoModPago the permisoModPago to set
     */
    public void setPermisoModPago(boolean permisoModPago) {
        this.permisoModPago = permisoModPago;
    }

    /**
     * @return the permisoModEmpresa
     */
    public boolean isPermisoModEmpresa() {
        return permisoModEmpresa;
    }

    /**
     * @param permisoModEmpresa the permisoModEmpresa to set
     */
    public void setPermisoModEmpresa(boolean permisoModEmpresa) {
        this.permisoModEmpresa = permisoModEmpresa;
    }

    /**
     * @return the permisoModContrato
     */
    public boolean isPermisoModContrato() {
        return permisoModContrato;
    }

    /**
     * @param permisoModContrato the permisoModContrato to set
     */
    public void setPermisoModContrato(boolean permisoModContrato) {
        this.permisoModContrato = permisoModContrato;
    }

    /**
     * @return the autenticado
     */
    public boolean isAutenticado() {
        return autenticado;
    }

    /**
     * @param autenticado the autenticado to set
     */
    public void setAutenticado(boolean autenticado) {
        this.autenticado = autenticado;
    }

    /**
     * @return the permisoAdministracion
     */
    public boolean isPermisoAdministracion() {
        return permisoAdministracion;
    }

    /**
     * @param permisoAdministracion the permisoAdministracion to set
     */
    public void setPermisoAdministracion(boolean permisoAdministracion) {
        this.permisoAdministracion = permisoAdministracion;
    }

    /**
     * @return the usuario
     */
    public String getUsuario() {
        return usuario;
    }

    /**
     * @param usuario the usuario to set
     */
    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }

    /**
     * @return the clave
     */
    public String getClave() {
        return clave;
    }

    /**
     * @param clave the clave to set
     */
    public void setClave(String clave) {
        this.clave = clave;
    }

    /**
     * @return the nombre
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * @param nombre the nombre to set
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * @return the apellido
     */
    public String getApellido() {
        return apellido;
    }

    /**
     * @param apellido the apellido to set
     */
    public void setApellido(String apellido) {
        this.apellido = apellido;
    }
}
